﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NNTH.Data
{
    public partial class HocVien : System.ComponentModel.IDataErrorInfo
    {
        public string GioiTinhText
        {
            get
            {
                return this.GioiTinh?"Nữ": "Nam";
            }
        }

        partial void OnMaBLChanged()
        {
            if (this.LopHoc!=null)
            {
                this.MaHV = this.LopHoc.MaHV;
            }
            
        }
        public bool CoThiLai
        {
            get
            {
                return this.BangDiem.Where(p => p.Diem1 < 5 && p.Diem2 > 0).Any();
            }
        }
        public string XepLoai
        {
            get
            {
                if (DiemTB>=5F)
                {
                    if (CoThiLai || ((5F <= DiemTB) && (DiemTB < 6F)))
                    {
                        return "Trung bình";
                    }
                    if ((6F <= DiemTB) && (DiemTB < 7F))
                    {
                        return "Trung bình khá";
                    }
                    if ((7F <= DiemTB) && (DiemTB < 8F))
                    {
                        return "Khá";
                    }
                    if ((8F <= DiemTB) && (DiemTB < 9F))
                    {
                        return "Giỏi";
                    }
                    if ((8F <= DiemTB) && (DiemTB < 9F))
                    {
                        return "Giỏi";
                    }
                    if (9F <= DiemTB)
                    {
                        return "Xuất sắc";
                    }
                    else
                    {
                        return "Xuất sắc";
                    }
                    
                }
                else
                {
                    return "--";
                }
    
            }
        }
        public float DiemTB
        {
            get
            {
                return !this.BangDiem.Any() ? 0F : (float)this.BangDiem.Sum(p => p.Diem) / (float)this.BangDiem.Count;
            }
        }
        public string HoTenHV
        {
            get
            {
                return string.Format("{0} {1}",this.Ho,this.Ten);
            }
        }

        public string ThongTin
        {
            get
            {
                return string.Format("{0} - {1} {2}",this.MaHV.Trim(), this.Ho,this.Ten);
            }
        }

        public string Tien_BangChu
        {
            get
            {
                return ReadNumber.ByWords((long)this.TienPhaiNop);
            }
        }
        public decimal SoTienGiam
        {
            get
            {
                return (decimal)((this.SoTien * this.TienGiam)/100);
            }
        }
        public decimal TienPhaiNop
        {
            get
            {
                return this.SoTien - this.SoTienGiam;
            }
        }
        public string Error
        {
            get
            {
                if (this.EntityState == System.Data.EntityState.Added || this.EntityState == System.Data.EntityState.Modified)
                {
                    StringBuilder sb = new StringBuilder();

                    if (!String.IsNullOrWhiteSpace(this["Ho"]))
                        sb.AppendLine(this["Ho"]);
                    if (!String.IsNullOrWhiteSpace(this["Ten"]))
                        sb.AppendLine(this["Ten"]);
                    if (!String.IsNullOrWhiteSpace(this["NgaySinh"]))
                        sb.AppendLine(this["NgaySinh"]);

                    if (!String.IsNullOrWhiteSpace(this["MaDT"]))
                        sb.AppendLine(this["MaDT"]);

                    if (!String.IsNullOrWhiteSpace(this["MaLop"]))
                        sb.AppendLine(this["MaLop"]);

                    if (!String.IsNullOrWhiteSpace(this["MaBL"]))
                        sb.AppendLine(this["MaBL"]);

                    if (!String.IsNullOrWhiteSpace(this["SoTien"]))
                        sb.AppendLine(this["SoTien"]);

                    if (!String.IsNullOrWhiteSpace(this["TienGiam"]))
                        sb.AppendLine(this["TienGiam"]);

                    string errors = sb.ToString();
                    return !String.IsNullOrEmpty(errors) ? errors : String.Empty;
                }
                else
                {
                    return String.Empty;
                }
            }
        }

        public string this[string columnName]
        {
            get
            {
                if (this.EntityState == System.Data.EntityState.Added || this.EntityState == System.Data.EntityState.Modified)
                {
                    switch (columnName)
                    {
                        case "Ho":
                            return String.IsNullOrWhiteSpace(this.Ho) ? "Chưa nhập tên học viên!" : String.Empty;
                        case "Ten":
                            return String.IsNullOrWhiteSpace(this.Ten) ? "Chưa nhập tên học viên!" : String.Empty;
                        case "TienGiam":
                            return ((this.TienGiam < 0) || (this.TienGiam > 100)) ? "Mức giảm phí chưa hợp lệ!" : String.Empty;

                        case "SoTien":
                            return (this.SoTien < 0) ? "Mức giảm phí chưa hợp lệ!" : String.Empty;

                        case "MaBL":
                            return String.IsNullOrWhiteSpace(this.MaBL) ? "Chưa có mã biên lai!" : String.Empty;
                        case "MaLop":
                            return this.LopHoc == null ? "Chưa chọn lớp!" : String.Empty;
                        case "MaDT":
                            return this.DoiTuong == null ? "Chưa chọn đối tượng!" : String.Empty;

                        default:
                            return String.Empty;
                    }
                }
                else
                {
                    return String.Empty;
                }
            }
        }

        partial void OnMaHVChanged()
        {
            if (MaHV!= null)
            {
                MaBL = string.Format("BL{0}",MaHV);
            }
        }
        partial void OnMaDTChanged()
        {
            if (DoiTuong!=null)
            {
                this.TienGiam = this.DoiTuong.GiamPhi;
            }
        }
    }
}
